package com.lanhe.member.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lanhe.common.core.domain.entity.LhMemberBase;
import com.lanhe.common.core.domain.entity.vo.LhMemberStatisticsVo;
import com.lanhe.member.domain.dto.BindingMemberBaseDTO;
import com.lanhe.member.domain.dto.LhMemberBaseDTO;
import com.lanhe.member.domain.vo.LhMemberBaseVO;
import com.lanhe.order.domain.LhOrdersPool;

import java.math.BigDecimal;
import java.util.List;

/**
 * 会员基础表(LhMemberBase)表服务接口
 *
 * @author zhanggl
 * @since 2023-12-04 17:01:14
 */
public interface ILhMemberBaseService extends IService<LhMemberBase> {

	/**
	 * 添加会员基础
	 **/
	LhMemberBase addLhMemberBase(LhMemberBase dto) throws Exception;

	/**
	 * 更新会员基础
	 **/
	LhMemberBase updateLhMemberBase(LhMemberBase dto) throws Exception;

	/**
	 * 会员基础详情
	 **/
	LhMemberBaseVO getLhMemberBaseDetail(Long memberId) throws Exception;

	/**
	 * 根据微信唯一id 查询账户信息
	 **/
	LhMemberBase getLhMemberBaseByWxId(String wxId) throws Exception;

	LhMemberBase getUserByUserKey(String userKey);

	LhMemberBase getUserByMobile(String mobile);

	Integer bindMobile(LhMemberBaseDTO dto);

	List<Object> rankingList(Integer type, Integer pageNum, Integer pageSize);

	/**
	 * 更新收益
	 *
	 * @author zhanggl
	 * @date 2023年12月11日21:17:06
	 */
	int updateMemberAmount(LhMemberBase dto);

	void updateDuoyouVipNumber(String vipNumber, Long memberId);

	/**
	 * 1、更新用户收益数据
	 * 2、增加用户收益记录
	 * 3、更新统计数据
	 *
	 * @param ordersPool 实体
	 * @return int
	 * @author zhanggl
	 * @date 2023/12/27
	 */
	void updateMemberBenefits(LhOrdersPool ordersPool);

	/**
	 * 更新续费次数
	 *
	 * @param memberId 会员ID
	 * @return java.lang.Integer
	 * @author zhanggl
	 * @date 2024/1/5
	 */
	Integer updateRenewNumber(Long memberId);

	/**
	 * 更新会员等级
	 *
	 * @param memberId 会员ID
	 * @return java.lang.Integer
	 * @author zhanggl
	 * @date 2024/1/5
	 */
	Integer updateLeaderLevel(Long memberId, Integer three);


	/**
	 * 更新会员基础余额
	 *
	 * @param memberId 用户ID
	 * @param amount   金额
	 * @param type     类型
	 * @author zhanggl
	 * @date 2024/1/5
	 */
	void updateMemberBaseBalance(Long memberId, BigDecimal amount, Integer type);

	/**
	 * 更新会员基础余额
	 *
	 * @param memberId 用户ID
	 * @param amount   金额
	 * @author zhanggl
	 * @date 2024/1/5
	 */
	int updateLhMemberBalance(Long memberId, BigDecimal amount);

	/**
	 * 会员基础列表
	 *
	 * @param lhMemberBase
	 * @return
	 */
	List<LhMemberBase> selectLhMemberBaseList(LhMemberBase lhMemberBase);

	/**
	 * 老师批量绑定学员
	 *
	 * @param bindingMemberBaseDTO
	 * @return
	 */
	int bindingMemberBase(BindingMemberBaseDTO bindingMemberBaseDTO);

	/**
	 * 减少积分
	 *
	 * @param memberId   会员ID
	 * @param renewScore 积分
	 * @author zhanggl
	 * @date 2024/1/17
	 */
	int reduceResidueScore(Long memberId, Integer renewScore);

	/**
	 * 更新用户等级及有效期
	 *
	 * @param memberId     会员ID
	 * @param leaderLevel  等级
	 * @param validityDays 天数
	 * @param orderType    类型
	 * @author zhanggl
	 * @date 2024/1/17
	 */
	int updateMemberLevelAndExpiryDate(Long memberId, Integer leaderLevel, Integer validityDays, Integer orderType);

	/**
	 * 获取用户的注册量，待提现总额，已提现总额的统计
	 * @return
	 */
	LhMemberStatisticsVo getMemberStat();
}

